package kayttoliittyma;

import opintopaivakirja.Muistiinpano;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.BoxLayout;
import opintopaivakirja.Memo;
import opintopaivakirja.Tavoite;

/**
 *
 * @author Erkkinuuttinen
 */
public class PanelTavoite extends javax.swing.JPanel {

    /** Creates new form PanelTavoite */
    public PanelTavoite() {
        initComponents();
        jPanelTavoitteet.setLayout(new BoxLayout(jPanelTavoitteet, BoxLayout.Y_AXIS));

        // ArrayList<Muistiinpano> memot = new ArrayList<Muistiinpano>();

        this.panelit = new ArrayList<PanelMuistiinpano>();

        //Muistiinpano tavoite = this.tavoite = new Muistiinpano();

        // tekstikenttien oletustekstit
        jTextFieldOtsikko1.setText(tavoiteTF);

        // tavoite pitää tallentaa tässä vaiheessa ennenkin voi tallentaa muistiinpanon
        jButton1.setVisible(false);

        //PanelMuistiinpano pmemo = new PanelMuistiinpano(id);
        //panelit.add(pmemo);
        //  System.out.println("MEMO PANELIT SIZE " + panelit.size());
        //jPanelTavoitteet.add(pmemo);
    }

    /**
     *
     * @param memot on omat muistiinpanot
     * @param tavoite jokaisella projektilla on oma muistiinpano
     */
    public PanelTavoite(ArrayList<Muistiinpano> memot, Muistiinpano tavoite) {
        initComponents();
        jPanelTavoitteet.setLayout(new BoxLayout(jPanelTavoitteet, BoxLayout.Y_AXIS));

        //this.memot = new ArrayList<Muistiinpano>();
        this.panelit = new ArrayList<PanelMuistiinpano>();
        // this.tavoite = tavoite;

        this.tila = tavoite.getTila();
        this.id = tavoite.getId();

        ArrayList<Muistiinpano> tavoitteen_memot = this.poimiTavoitteenMemot(memot);

        jTextFieldOtsikko1.setText(tavoite.getOtsikko());
        if (!tavoite.getOtsikko().equals("")) {
            jTextFieldOtsikko1.setForeground(Color.black);
        }

        this.asetaTavoitteenMuistiinpanot(tavoitteen_memot);

    }

    /**
     *
     * @return
     */
    public ArrayList<Muistiinpano> getTavoiteJaMuistiinpanot() {
        ArrayList<Muistiinpano> muistiinpanot = new ArrayList<Muistiinpano>();
        Muistiinpano tavoite = new Tavoite();

        // jos tavoite on tyhja ei myöskään lisätä sen muistiinpanoja!!!!!
        if (!jTextFieldOtsikko1.getText().equals(tavoiteTF)) {

            tavoite.setOtsikko(jTextFieldOtsikko1.getText());
            tavoite.setAsia("");
            tavoite.setTyyppi(1);
            tavoite.setTila(tila);
            tavoite.setId(id);
            tavoite.setIsa(0);
            tavoite.setJarjestys(0);

            muistiinpanot.add(tavoite);

            for (PanelMuistiinpano pm : panelit) {
                Muistiinpano m = pm.getMuistiinpano();

                if (!m.getAsia().equals("")) { // jos ei tyhjä

                    // isa tavoite
                    m.setIsa(id);

                    if (m.getId() == 0 && m.getTila() == -1) { // jos ei uusi ja poistettu niin tehdään else
                    } else {
                        if (tila == -1) { // jos tavoite -1 niin memotkin pois
                            m.setTila(-1);
                        }
                        muistiinpanot.add(m);
                    }
                }
            }
        }
        return muistiinpanot;
    }

    private ArrayList<Muistiinpano> poimiTavoitteenMemot(ArrayList<Muistiinpano> memot) {
        ArrayList<Muistiinpano> mem = new ArrayList<Muistiinpano>();

        for (Muistiinpano m : memot) {
            if (m.getIsa() == this.id) {
                mem.add(m);
            }
        }
        return mem;
    }

    private void asetaTavoitteenMuistiinpanot(ArrayList<Muistiinpano> memsit) {

        if (memsit.size() > 0) {
            for (Muistiinpano memo : memsit) {
                int jarjestysnro = 0;
                if (memo instanceof Memo) {
                    memo.setJarjestys(jarjestysnro++);
                    PanelMuistiinpano pm = new PanelMuistiinpano(memo);
                    panelit.add(pm);
                    jPanelTavoitteet.add(pm);
                }
            }
        } else {
            PanelMuistiinpano tmp = new PanelMuistiinpano(id);
            panelit.add(tmp);
            jPanelTavoitteet.add(tmp);
        }

        this.validate();
        this.updateUI();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelTavoitteet = new javax.swing.JPanel();
        jTextFieldOtsikko1 = new javax.swing.JTextField();
        jLabelMerkki = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        jButton1 = new javax.swing.JButton();
        jLabelPoisto = new javax.swing.JLabel();

        jPanelTavoitteet.setName("jPanelTavoitteet"); // NOI18N
        jPanelTavoitteet.addContainerListener(new java.awt.event.ContainerAdapter() {
            public void componentAdded(java.awt.event.ContainerEvent evt) {
                jPanelTavoitteetComponentAdded(evt);
            }
        });

        javax.swing.GroupLayout jPanelTavoitteetLayout = new javax.swing.GroupLayout(jPanelTavoitteet);
        jPanelTavoitteet.setLayout(jPanelTavoitteetLayout);
        jPanelTavoitteetLayout.setHorizontalGroup(
            jPanelTavoitteetLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 419, Short.MAX_VALUE)
        );
        jPanelTavoitteetLayout.setVerticalGroup(
            jPanelTavoitteetLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 160, Short.MAX_VALUE)
        );

        jTextFieldOtsikko1.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldOtsikko1.setText("Otsikko");
        jTextFieldOtsikko1.setName("jTextFieldOtsikko1"); // NOI18N
        jTextFieldOtsikko1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jTextFieldOtsikko1MousePressed(evt);
            }
        });
        jTextFieldOtsikko1.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldOtsikko1FocusLost(evt);
            }
        });

        jLabelMerkki.setText("▼");
        jLabelMerkki.setName("jLabelMerkki"); // NOI18N
        jLabelMerkki.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jLabelMerkkiMouseReleased(evt);
            }
        });

        jSeparator1.setName("jSeparator1"); // NOI18N

        jButton1.setText("Lisää uusi muistiinpano");
        jButton1.setName("jButton1"); // NOI18N
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabelPoisto.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLabelPoisto.setText("X");
        jLabelPoisto.setName("jLabelPoisto"); // NOI18N
        jLabelPoisto.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabelPoistoMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanelTavoitteet, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(jLabelMerkki)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextFieldOtsikko1, javax.swing.GroupLayout.DEFAULT_SIZE, 392, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabelPoisto)))
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(278, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelMerkki)
                    .addComponent(jTextFieldOtsikko1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelPoisto))
                .addGap(18, 18, 18)
                .addComponent(jPanelTavoitteet, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void jTextFieldOtsikko1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextFieldOtsikko1MousePressed
        jTextFieldOtsikko1.setForeground(Color.black);
        if (jTextFieldOtsikko1.getText().equals(tavoiteTF)) {
            jTextFieldOtsikko1.setText("");
        }
}//GEN-LAST:event_jTextFieldOtsikko1MousePressed

    private void jTextFieldOtsikko1FocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldOtsikko1FocusLost
        if (jTextFieldOtsikko1.getText().length() == 0) {
            jTextFieldOtsikko1.setForeground(Color.gray);
            jTextFieldOtsikko1.setText(tavoiteTF);
        }
}//GEN-LAST:event_jTextFieldOtsikko1FocusLost

    private void jLabelMerkkiMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabelMerkkiMouseReleased
        if (jPanelTavoitteet.isVisible()) {
            jPanelTavoitteet.setVisible(false);
            jLabelMerkki.setText("►");
        } else {
            jPanelTavoitteet.setVisible(true);
            jLabelMerkki.setText("▼");
        }
}//GEN-LAST:event_jLabelMerkkiMouseReleased

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        PanelMuistiinpano pmemo = new PanelMuistiinpano(id);
        panelit.add(pmemo);
        jPanelTavoitteet.add(pmemo);

        this.validate();
        this.updateUI();
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jPanelTavoitteetComponentAdded(java.awt.event.ContainerEvent evt) {//GEN-FIRST:event_jPanelTavoitteetComponentAdded
        //System.out.println("Component Added() : PanelTavoite");
    }//GEN-LAST:event_jPanelTavoitteetComponentAdded

    private void jLabelPoistoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabelPoistoMouseClicked
        tila = -1;
        //System.out.println("poistuuko");
        this.setVisible(false);
    // TODO: testaus toimiiko ja lisää tähän se tarkastelu, ei poistu heti!
    }//GEN-LAST:event_jLabelPoistoMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabelMerkki;
    private javax.swing.JLabel jLabelPoisto;
    public javax.swing.JPanel jPanelTavoitteet;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTextField jTextFieldOtsikko1;
    // End of variables declaration//GEN-END:variables
    private ArrayList<PanelMuistiinpano> panelit;
    private int tila = 0;
    private int id = 0;
    private final String tavoiteTF = "Opintojen tavoite 1";
}

